package com.tbvtc.agriculturalcreditchainserver2025.utils.recognize;

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.stereotype.Component;

import java.util.*;
@Component
public class OcrDataTransformer {

    private static final ObjectMapper objectMapper = new ObjectMapper();

    /**
     * 转换OCR数据，将施肥记录和农药记录分别组成集合
     */
    public Map<String, Object> transform(Map<Integer, String> dataMap) {
        // 提取原始数据部分


        // 主容器：田间档案
        Map<String, Object> fieldRecord = new HashMap<>();

        // 施肥记录集合（包含2个记录）
        List<Map<String, String>> fertilizationRecords = new ArrayList<>();
        // 农药记录集合（包含2个记录）
        List<Map<String, String>> pesticideRecords = new ArrayList<>();

        // 临时容器：当前正在处理的记录
        Map<String, String> currentFertRecord = null;
        Map<String, String> currentPesticideRecord = null;

        // 遍历所有数据（已按顺序排列）
        for (String value : dataMap.values()) {
            // 跳过根标题
            if ("田间档案".equals(value)) {
                continue;
            }

            // 检测施肥记录1开始
            if ("施肥记录1".equals(value)) {
                currentFertRecord = new HashMap<>();
                fertilizationRecords.add(currentFertRecord);
                continue;
            }

            // 检测施肥记录2开始
            if ("施肥记录2".equals(value)) {
                currentFertRecord = new HashMap<>();
                fertilizationRecords.add(currentFertRecord);
                continue;
            }

            // 检测农药记录1开始
            if ("农药记录1".equals(value)) {
                currentPesticideRecord = new HashMap<>();
                pesticideRecords.add(currentPesticideRecord);
                continue;
            }

            // 检测农药记录2开始
            if ("农药记录2".equals(value)) {
                currentPesticideRecord = new HashMap<>();
                pesticideRecords.add(currentPesticideRecord);
                continue;
            }

            // 拆分键值对（格式：key: value）
            String[] keyValue = splitKeyValue(value);
            if (keyValue == null) {
                continue;
            }
            String key = keyValue[0];
            String val = keyValue[1];

            // 放入对应的容器
            if (currentFertRecord != null) {
                currentFertRecord.put(key, val);
            } else if (currentPesticideRecord != null) {
                currentPesticideRecord.put(key, val);
            } else {
                // 基础信息字段
                fieldRecord.put(key, val);
            }
        }

        // 将记录集合加入主容器
        fieldRecord.put("施肥记录", fertilizationRecords);
        fieldRecord.put("农药记录", pesticideRecords);

        // 构建最终响应结构
        Map<String, Object> result = new HashMap<>();
        result.put("data", Collections.singletonMap("田间档案", fieldRecord));

        return result;
    }

    /**
     * 拆分"key: value"格式的字符串
     */
    private String[] splitKeyValue(String value) {
        int colonIndex = value.indexOf(": ");
        if (colonIndex <= 0) {
            return null; // 不包含有效键值对
        }
        return new String[]{
                value.substring(0, colonIndex),
                value.substring(colonIndex + 2)
        };
    }
}
    